home *** CD-ROM | disk | FTP | other *** search
HTML Component | 2009-02-25 | 3.2 KB | 104 lines |
- <public:component>
- <public:attach event="onpropertychange" onevent="iePNGFix(0)" />
-
- <script type="text/javascript">
-
- // IE5.5+ PNG Alpha Fix v1.0
- // (c) 2004-2008 Angus Turnbull http://www.twinhelix.com
-
- // This is licensed under the GNU LGPL, version 2.1 or later.
- // For details, see: http://creativecommons.org/licenses/LGPL/2.1/
-
-
- // This must be a path to a blank image, relative to the HTML document(s).
- // In production use I suggest '/images/blank.gif' or similar. That's all!
- if (typeof blankImg == 'undefined') var blankImg = 'blank.gif';
-
-
-
- function filt(s, b)
- {
- var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
- var sM = (currentStyle.backgroundRepeat == 'no-repeat') ? 'crop' : 'scale';
- s = (s || '').replace(/\(/g, '%28').replace(/\)/g, '%29');
-
- if (s && !(/IMG|INPUT/.test(nodeName) && !b) &&
- currentStyle.width == 'auto' && currentStyle.height == 'auto')
- {
- style.width = offsetWidth + 'px';
- style.height = clientHeight + 'px';
- if (currentStyle.display == 'inline') style.display = 'inline-block';
- }
-
- if (filters[f])
- {
- filters[f].enabled = s ? true : false;
- if (s) with (filters[f]) { src = s }
- }
- else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="' + sM + '")';
- }
-
- function iePNGFix(init)
- {
- if (!/MSIE (5\.5|6)/.test(navigator.userAgent) || typeof filters == 'unknown') return;
- var evt = init ? { propertyName: 'src,background' } : event;
- var isSrc = /src/.test(evt.propertyName);
- var isBg = /background/.test(evt.propertyName);
- var isClass = !init &&
- ((this.className != this._png_class) && (this.className || this._png_class));
- if (!(isSrc || isBg || isClass)) return;
- this._png_class = this.className;
- var blank = blankImg.match(/([^\/]+)$/)[1];
-
- // Required for Whatever:hover support - erase any set BG if className changes.
- if (isClass && ((style.backgroundImage.indexOf('url(') == -1) ||
- (style.backgroundImage.indexOf(blank) > -1)))
- {
- setTimeout(function() { this.style.backgroundImage = '' }, 0);
- return;
- }
-
- if (isSrc && this.src && /IMG|INPUT/.test(nodeName))
- {
- if ((/\.png/i).test(src))
- {
- filt(src, 1);
- src = blankImg;
- }
- else if (src.indexOf(blank) == -1) filt();
- }
-
- var bgSrc = currentStyle.backgroundImage || style.backgroundImage;
- if ((bgSrc + this.src).indexOf(blank) == -1)
- {
- var bgPNG = bgSrc.match(/^url[("']+(.*\.png[^\)"']*)[\)"']+[^\)]*$/i);
-
- if (bgPNG)
- {
- style.backgroundImage = 'url("' + blankImg + '")';
- filt(bgPNG[1], 0);
- // Unclickable elements inside PNG backgrounds.
- var tags = ['a', 'input', 'select', 'textarea', 'iframe', 'object'],
- t = tags.length, tFix = [];
- while (t--)
- {
- var elms = all.tags(tags[t]), e = elms.length;
- while (e--) tFix.push(elms[e]);
- }
- var t = tFix.length;
- if (t && (/relative|absolute/i).test(currentStyle.position))
- alert('IEPNGFix: Children of positioned element are unclickable:\n\n<' +
- nodeName + (id && ' id=' + id) + '>');
- while (t--)
- if (!(/relative|absolute/i).test(tFix[t].currentStyle.position))
- tFix[t].style.position = 'relative';
- }
- else filt();
- }
- }
-
- iePNGFix(1);
-
- </script>
- </public:component>
-